Coverage Report

Created: 2025-05-07 21:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
D:\a\tools.proto\tools.proto\dynamic\src\buffer\buffer.rs
Line
Count
Source
1
// Copyright (c) 2025, BlockProject 3D
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification,
6
// are permitted provided that the following conditions are met:
7
//
8
//     * Redistributions of source code must retain the above copyright notice,
9
//       this list of conditions and the following disclaimer.
10
//     * Redistributions in binary form must reproduce the above copyright notice,
11
//       this list of conditions and the following disclaimer in the documentation
12
//       and/or other materials provided with the distribution.
13
//     * Neither the name of BlockProject 3D nor the names of its contributors
14
//       may be used to endorse or promote products derived from this software
15
//       without specific prior written permission.
16
//
17
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29
use std::cell::Cell;
30
use std::rc::Rc;
31
use crate::buffer::unsafe_buffer::UnsafeBuffer;
32
33
#[derive(Debug)]
34
pub struct Buffer<'a> {
35
    pub(super) unsafe_buffer: UnsafeBuffer<'a>,
36
    pub(super) flat: Rc<Cell<bool>>,
37
    pub(super) offset: usize
38
}
39
40
impl<'a> Buffer<'a> {
41
7
    pub fn set_bytes(&mut self, bytes: &'a [u8]) {
42
7
        self.unsafe_buffer = UnsafeBuffer::Borrowed(bytes);
43
7
        self.offset = 0;
44
7
        self.flat.set(false);
45
7
    }
46
47
5
    pub fn copy_from(&mut self, bytes: &[u8]) {
48
5
        let new_flat = unsafe { self.unsafe_buffer.copy(bytes) };
49
5
        if self.flat.get() == true {
  Branch (49:12): [True: 2, False: 0]
  Branch (49:12): [True: 0, False: 3]
50
2
            self.flat.set(new_flat);
51
3
        }
52
5
    }
53
54
    #[inline(always)]
55
227
    pub fn as_bytes(&self) -> &[u8] {
56
227
        self.unsafe_buffer.as_bytes()
57
227
    }
58
59
    #[inline(always)]
60
19
    pub fn as_bytes_mut(&mut self) -> &mut [u8] {
61
19
        self.unsafe_buffer.as_bytes_mut()
62
19
    }
63
64
    #[inline(always)]
65
188
    pub fn len(&self) -> usize {
66
188
        self.unsafe_buffer.len()
67
188
    }
68
69
    #[inline(always)]
70
0
    pub fn offset(&self) -> usize {
71
0
        self.offset
72
0
    }
73
74
    #[inline(always)]
75
27
    pub fn is_empty(&self) -> bool {
76
27
        self.len() == 0
77
27
    }
78
}